/**
 * \brief 如果不使用C++动态库，C源码中不能调用C++的内容，只能使用回调函数
 */

#include <stdio.h>

#define NULL ((void *)0)
typedef int (*pfunc)(void);
pfunc cppprint1 = NULL, cppprint2 = NULL;
int cppdata1, cppdata2, cppdata3;

extern int c_module_init(void *func1, void *func2, int data1, int data2, int data3)
{
    if (func1)
        cppprint1 = func1;
    if (func2)
        cppprint2 = func2;

    cppdata1 = data1;
    cppdata2 = data2;
    cppdata3 = data3;

    // 测试g++编译C源码时是否支持GNU C的进阶关键字，如typeof
    printf("C++ callback to C module, data size: %d\n", sizeof(typeof(cppdata1)));

    return 0;
}

int c_module_process()
{
    printf("C++ Class data1~3: %d, %d, %d\n", cppdata1, cppdata2, cppdata3);

    if (cppprint1)
        cppprint1();
    if (cppprint2)
        cppprint2();

    return 0;
}
